
package GUI.pdaGrafica;

import javax.swing.JPanel;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import javax.swing.JWindow;
import java.awt.Dimension;
import javax.swing.BorderFactory;
import javax.swing.border.EtchedBorder;
import javax.swing.border.TitledBorder;
import java.awt.Font;
import java.awt.Color;
import javax.swing.JScrollPane;
import java.awt.Rectangle;
import javax.swing.border.BevelBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.DefaultListModel;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.JOptionPane;

import java.awt.event.KeyEvent;
import javax.swing.ImageIcon;
import java.awt.Point;


import javax.swing.JCheckBox;

import modelo.Restaurante;
import modelo.gestionCarta.Producto;
import modelo.gestionCarta.Seccion;
import modelo.gestionPedidos.Consumicion;
import modelo.gestionPedidos.Pedido;

import javax.swing.ListSelectionModel;

/**
 * Esta clase implementa la sección crear/editar mesa.
 * Primera pantalla de selección de silla
 * Segunda pantalla de seleccion de seccion
 * Tercera pantalla de seleccione de producto
 * 
 * @created 04-may-2007 12:44
 * @version 1.0
 * @author Enrique Menor Santos
 *
 */
public class CrearEditarConsumiciones extends JWindow implements ActionListener,ListSelectionListener,ItemListener {

	private static final long serialVersionUID = 1L;

	private JPanel jElegirSilla = null;  //  @jve:decl-index=0:visual-constraint="257,11"

	private JScrollPane jspElegirSilla = null;

	private JList jlElegirSilla = null;
	/**
	 * El modelo de la vista anterior. Contendrá  las sillas del pedido
	 */
	private DefaultListModel modeloSillas;

	private JButton jbSiguienteSilla = null;

	private JButton jbCancelarSilla = null;

	private JPanel jElegirSeccion = null;  //  @jve:decl-index=0:visual-constraint="8,5"

	private JScrollPane jspElegirSeccion = null;

	private JList jlSecciones = null;
	/**
	 * El modelo de la vista anterior. Contendrá las secciones del pedido
	 */
	private DefaultListModel modeloSecciones;

	private JButton jbSiguienteSeccion = null;

	private JButton jbCancelarSeccion = null;

	private JPanel jElegirProducto = null;  //  @jve:decl-index=0:visual-constraint="516,11"

	private JScrollPane jspElegirProducto = null;

	private JList jlProductos = null;
	/**
	 * El modelo de la vista anterior. Contendrá los productos del pedido
	 */
	private DefaultListModel modeloProductos;

	private JButton jbSiguienteProducto = null;

	private JButton jbCancelarProducto = null;

	private JButton jBObservaciones = null;

	private JCheckBox jCBBarra = null;

	private JCheckBox jCBRetrasar = null;
	/**
	 * Objeto restaurante a gestionar. Se pasará como parámetro al resto de clases visuales. 
	 */
	private Restaurante r=null;
	/**
	 * Referencia al pedido que estamos editando
	 */
	private Pedido pedido=null;
	/**
	 * Referencia a la consumicion que vamos a editar
	 */
	private Consumicion consumicionAEditar=null;
	/**
	 * Hace referencia a la silla seleccionada por el camarero
	 * Valdrá -1 sino se ha seleccionado ninguna
	 */
	private int comensalSelecionado=-1;
	/**
	 * Array con las secciones
	 */
	private Seccion[] arraySecciones = null;
	/**
	 * Referencia a la seleccion seleccionada
	 */
	private Seccion seccionSeleccionada=null;  //  @jve:decl-index=0:
	/**
	 * Array con los productos
	 */
	private Producto[] arrayProductos = null;
	/**
	 * Referencia al producto seleccionado
	 */
	private Producto poductoSeleccionado=null;  //  @jve:decl-index=0:
	/**
	 * Es el estado con el que se creará la consumición.
	 * Por defecto es 'solicitado'.
	 * Si la pestaña 'barra' está seleccionada será 'servido' directamente
	 * Si la pestaña 'retrasado' está seleccionada será 'retrasado'
	 */
	private int estado = Consumicion.SOLICITADO;
	/**
	 * Contiene las observaciones que el camarero añada a la consumición.
	 * Inicialmente será la cadena vacía. 
	 */
	private String observaciones="";
	
	

	/**
	 * Construcotr público
	 * @param r: objeto restaurante que está en memoria durante toda la ejecución de la aplicación
	 * @param pedido: pedido al que pertenece la consumicion
	 * @param consumicion: en caso de EDITAR,contiene el pedido a editar, en caso contrario vale null
	 */
	public CrearEditarConsumiciones(Restaurante r, Pedido pedido, Consumicion consumicion) {
		super();
		this.r=r;
		this.pedido=pedido;
		this.consumicionAEditar=consumicion;
		//recuperamos directamente la carta de la BD por si ha habido cambios desde que se creo el objeto restaurante
		//- getCarta accede a BD
		//- getSecciones no accede a BD
		//lo hacemos en el constructor de la calse para no repetir acceso a BD mientras dure la creación/editar
		this.arraySecciones = this.r.getCarta().getSecciones(); 
		
		initialize();
	}

	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setSize(240, 320);
		this.setPreferredSize(new Dimension(240, 320));
		this.setMinimumSize(new Dimension(240, 320));
		this.setName("crearEditarConsumicion");
		this.setMaximumSize(new Dimension(240, 320));
		this.setContentPane(this.getJElegirSilla());
	}

	/**
	 * This method initializes jElegirSilla	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJElegirSilla() {
		if (jElegirSilla == null) {
			jElegirSilla = new JPanel();
			jElegirSilla.setLayout(null);
			jElegirSilla.setName("");
			jElegirSilla.setToolTipText("Seleccione la silla que será titular del pedido");
			if(this.consumicionAEditar==null)
				jElegirSilla.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "CREAR CONSUMICIÓN", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			else
				jElegirSilla.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "EDITAR CONSUMICIÓN", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			jElegirSilla.setToolTipText("Seleccione la silla que será titular del pedido");
			jElegirSilla.setSize(new Dimension(240, 320));
			jElegirSilla.add(getJspElegirSilla(), null);
			jElegirSilla.add(getJbSiguienteSilla(), null);
			jElegirSilla.add(getJbCancelarSilla(), null);
		}
		return jElegirSilla;
	}

	/**
	 * This method initializes jspElegirSilla	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJspElegirSilla() {
		if (jspElegirSilla == null) {
			jspElegirSilla = new JScrollPane();
			jspElegirSilla.setBounds(new Rectangle(5, 23, 230, 248));
			jspElegirSilla.setViewportView(getJlElegirSilla());
			jspElegirSilla.setBorder(BorderFactory.createTitledBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED), "Elegir Silla:", TitledBorder.LEFT, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
		}
		return jspElegirSilla;
	}

	/**
	 * This method initializes jlElegirSilla	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getJlElegirSilla() {
		if (jlElegirSilla == null) {
			this.creaModeloSillas();
			jlElegirSilla = new JList();
			jlElegirSilla.setModel(modeloSillas);
			jlElegirSilla.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			jlElegirSilla.addListSelectionListener(this);
			
			//incialización de la lista
			if(this.consumicionAEditar!=null)
			{
				this.comensalSelecionado=this.consumicionAEditar.getNumComensal();
				jlElegirSilla.setSelectedIndex(comensalSelecionado);
			}
		}
		return jlElegirSilla;
	}
	/**
	 * Método interno que crea el modelo de las sillas
	 *
	 */
	private void creaModeloSillas() 
	{
		modeloSillas = new DefaultListModel();
		
		if(this.pedido != null)
		{				
			for (int i=0;i<=this.pedido.getNumComensales();i++)
				modeloSillas.addElement("Silla"+String.valueOf(i));				
		}		
	}

	/**
	 * This method initializes jbSiguienteSilla	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJbSiguienteSilla() {
		if (jbSiguienteSilla == null) {
			jbSiguienteSilla = new JButton();
			jbSiguienteSilla.setBounds(new Rectangle(10, 280, 111, 26));
			jbSiguienteSilla.setToolTipText("Click para seleccionar la silla y pasar a Elegir Sección");
			jbSiguienteSilla.setMnemonic(KeyEvent.VK_ACCEPT);
			jbSiguienteSilla.setActionCommand("SiguienteSilla");
			jbSiguienteSilla.setIcon(new ImageIcon(getClass().getResource("/iconos/tick.png")));
			jbSiguienteSilla.setText("Siguiente");
			jbSiguienteSilla.setEnabled(false);
			jbSiguienteSilla.setName("siguienteSilla");
			jbSiguienteSilla.addActionListener(this);
		}
		return jbSiguienteSilla;
	}

	/**
	 * This method initializes jbCancelarSilla	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJbCancelarSilla() {
		if (jbCancelarSilla == null) {
			jbCancelarSilla = new JButton();
			jbCancelarSilla.setLocation(new Point(126, 280));
			jbCancelarSilla.setName("cancelarSilla");
			jbCancelarSilla.setMnemonic(KeyEvent.VK_CANCEL);
			jbCancelarSilla.setIcon(new ImageIcon(getClass().getResource("/iconos/arrow_undo.png")));
			jbCancelarSilla.setText("Atrás");
			jbCancelarSilla.setActionCommand("CancelarSilla");
			jbCancelarSilla.setSize(new Dimension(105, 26));
			jbCancelarSilla.addActionListener(this);
		}
		return jbCancelarSilla;
	}

	/**
	 * This method initializes jElegirSeccion	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJElegirSeccion() {
		if (jElegirSeccion == null) {
			jElegirSeccion = new JPanel();
			jElegirSeccion.setLayout(null);
			jElegirSeccion.setName("");
			jElegirSeccion.setToolTipText("Seleccione la sección donde se encuentra el prodcuto a agregar");
			if(this.consumicionAEditar==null)
				jElegirSeccion.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "CREAR CONSUMICIÓN", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			else
				jElegirSeccion.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "EDITAR CONSUMICIÓN", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			jElegirSeccion.setSize(new Dimension(240, 320));
			jElegirSeccion.add(getJspElegirSeccion(), null);
			jElegirSeccion.add(getJbSiguienteSeccion(), null);
			jElegirSeccion.add(getJbCancelarSeccion(), null);
		}
		return jElegirSeccion;
	}

	/**
	 * This method initializes jspElegirSeccion	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJspElegirSeccion() {
		if (jspElegirSeccion == null) {
			jspElegirSeccion = new JScrollPane();
			jspElegirSeccion.setBounds(new Rectangle(5, 23, 230, 248));
			jspElegirSeccion.setBorder(BorderFactory.createTitledBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED), "Elegir Sección:", TitledBorder.LEFT, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			jspElegirSeccion.setViewportView(getJlSecciones());
		}
		return jspElegirSeccion;
	}

	/**
	 * This method initializes jlSecciones	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getJlSecciones() {
		if (jlSecciones == null) 
		{
			creaModeloSecciones();
			jlSecciones = new JList();
			jlSecciones.setModel(this.modeloSecciones);
			jlSecciones.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			jlSecciones.addListSelectionListener(this);
			
			//	incialización de la lista
			if(this.seccionSeleccionada!=null)
			{
				for (int i=0;i<this.arraySecciones.length;i++)
					if(arraySecciones[i].getNombreSeccion().equals(seccionSeleccionada.getNombreSeccion()))
					{
						jlSecciones.setSelectedIndex(i);
						break;
					}				
			}			
		}
		return jlSecciones;
	}
	/**
	 * Método interno que crea el modelo de las secciones
	 *
	 */
	private void creaModeloSecciones() 
	{
		this.modeloSecciones = new DefaultListModel();
				
		//si hemos importado la lista de secciones correctamente en el constructor, añadimos las secciones a la lista del modelo
		if(this.arraySecciones != null)				
			//recorremos el aray de secciones y lo incluimos en el modelo
			for (int i=0;i<this.arraySecciones.length;i++)
				modeloSecciones.addElement(arraySecciones[i].getNombreSeccion());
	}

	/**
	 * This method initializes jbSiguienteSeccion	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJbSiguienteSeccion() {
		if (jbSiguienteSeccion == null) {
			jbSiguienteSeccion = new JButton();
			jbSiguienteSeccion.setBounds(new Rectangle(10, 280, 111, 26));
			jbSiguienteSeccion.setToolTipText("Click para seleccionar la silla y pasar a Elegir Sección");
			jbSiguienteSeccion.setMnemonic(KeyEvent.VK_ACCEPT);
			jbSiguienteSeccion.setActionCommand("SiguienteSeccion");
			jbSiguienteSeccion.setIcon(new ImageIcon(getClass().getResource("/iconos/tick.png")));
			jbSiguienteSeccion.setText("Siguiente");
			jbSiguienteSeccion.setEnabled(false);
			jbSiguienteSeccion.setName("siguienteSilla");
			jbSiguienteSeccion.addActionListener(this);
		}
		return jbSiguienteSeccion;
	}

	/**
	 * This method initializes jbCancelarSeccion	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJbCancelarSeccion() {
		if (jbCancelarSeccion == null) {
			jbCancelarSeccion = new JButton();
			jbCancelarSeccion.setLocation(new Point(126, 280));
			jbCancelarSeccion.setName("cancelarSilla");
			jbCancelarSeccion.setMnemonic(KeyEvent.VK_CANCEL);
			jbCancelarSeccion.setActionCommand("CancelarSeccion");
			jbCancelarSeccion.setIcon(new ImageIcon(getClass().getResource("/iconos/arrow_undo.png")));
			jbCancelarSeccion.setText("Atrás");
			jbCancelarSeccion.setSize(new Dimension(105, 26));
			jbCancelarSeccion.addActionListener(this);
			}
		return jbCancelarSeccion;
	}
	
	/**
	 * This method initializes jElegirProducto	
	 * 	
	 * @return javax.swing.JPanel	
	 */
	private JPanel getJElegirProducto() {
		if (jElegirProducto == null) {
			jElegirProducto = new JPanel();
			jElegirProducto.setLayout(null);
			jElegirProducto.setName("");
			jElegirProducto.setToolTipText("Seleccione los productos a agregar");
			if(this.consumicionAEditar==null)
				jElegirProducto.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "CREAR CONSUMICIÓN", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			else
				jElegirProducto.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED), "EDITAR CONSUMICIÓN", TitledBorder.CENTER, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			jElegirProducto.setSize(new Dimension(240, 320));
			jElegirProducto.add(getJspElegirProducto(), null);
			jElegirProducto.add(getJbSiguienteProducto(), null);
			jElegirProducto.add(getJbCancelarProducto(), null);
			jElegirProducto.add(getJBObservaciones(), null);
			jElegirProducto.add(getJCBBarra(), null);
			jElegirProducto.add(getJCBRetrasar(), null);
		}
		return jElegirProducto;
	}

	/**
	 * This method initializes jspElegirProducto	
	 * 	
	 * @return javax.swing.JScrollPane	
	 */
	private JScrollPane getJspElegirProducto() {
		if (jspElegirProducto == null) {
			jspElegirProducto = new JScrollPane();
			jspElegirProducto.setBorder(BorderFactory.createTitledBorder(BorderFactory.createBevelBorder(BevelBorder.LOWERED), "Elegir Producto:", TitledBorder.LEFT, TitledBorder.ABOVE_TOP, new Font("Dialog", Font.BOLD, 12), new Color(51, 51, 51)));
			jspElegirProducto.setLocation(new Point(5, 23));
			jspElegirProducto.setSize(new Dimension(230, 215));
			jspElegirProducto.setViewportView(getJlProductos());
		}
		return jspElegirProducto;
	}

	/**
	 * This method initializes jlProductos	
	 * 	
	 * @return javax.swing.JList	
	 */
	private JList getJlProductos() {
		if (jlProductos == null)
		{
			jlProductos = new JList();
			jlProductos.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
			jlProductos.addListSelectionListener(this);
						
		}
		return jlProductos;
	}
	/**
	 * Método interno que crea el modelo de las productos
	 *
	 */
	private void creaModeloProductos() 
	{
		this.modeloProductos = new DefaultListModel();
		jlProductos.setModel(this.modeloProductos);
			
		//si hemos importado la lista de productos correctamente, añadimos las secciones a la lista del modelo
		if(this.arrayProductos != null)				
			//recorremos el aray de productos y lo incluimos en el modelo
			for (int i=0;i<this.arrayProductos.length;i++)
				this.modeloProductos.addElement(this.arrayProductos[i].consultarNombreProducto());
				
	}

	/**
	 * This method initializes jbSiguienteProducto	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJbSiguienteProducto() {
		if (jbSiguienteProducto == null) {
			jbSiguienteProducto = new JButton();
			jbSiguienteProducto.setBounds(new Rectangle(10, 280, 111, 26));
			jbSiguienteProducto.setToolTipText("Click para guardar los datos de la consumición");
			jbSiguienteProducto.setMnemonic(KeyEvent.VK_ACCEPT);
			jbSiguienteProducto.setActionCommand("AceptarProducto");
			jbSiguienteProducto.setIcon(new ImageIcon(getClass().getResource("/iconos/accept.png")));
			jbSiguienteProducto.setText("Añadir");
			jbSiguienteProducto.setEnabled(false);
			jbSiguienteProducto.setName("aceptar");
			jbSiguienteProducto.addActionListener(this);
		}
		return jbSiguienteProducto;
	}

	/**
	 * This method initializes jbCancelarProducto	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJbCancelarProducto() {
		if (jbCancelarProducto == null) {
			jbCancelarProducto = new JButton();
			jbCancelarProducto.setLocation(new Point(126, 280));
			jbCancelarProducto.setName("cancelarProducto");
			jbCancelarProducto.setMnemonic(KeyEvent.VK_CANCEL);
			jbCancelarProducto.setActionCommand("CancelarProducto");
			jbCancelarProducto.setIcon(new ImageIcon(getClass().getResource("/iconos/arrow_undo.png")));
			jbCancelarProducto.setText("Atrás");
			jbCancelarProducto.setSize(new Dimension(105, 26));
			jbCancelarProducto.addActionListener(this);
		}
		return jbCancelarProducto;
	}

	
	/**
	 * This method initializes jBObservaciones	
	 * 	
	 * @return javax.swing.JButton	
	 */
	private JButton getJBObservaciones() {
		if (jBObservaciones == null) {
			jBObservaciones = new JButton();
			jBObservaciones.setLocation(new Point(90, 246));
			jBObservaciones.setActionCommand("Observaciones");
			jBObservaciones.setIcon(new ImageIcon(getClass().getResource("/iconos/information.png")));
			jBObservaciones.setMnemonic(KeyEvent.VK_O);
			jBObservaciones.setName("observaciones");
			jBObservaciones.setText("Observaciones");
			jBObservaciones.setToolTipText("Click para agregar observaciones a la consumición");
			jBObservaciones.setSize(new Dimension(141, 26));
			jBObservaciones.addActionListener(this);
		}
		return jBObservaciones;
	}

	/**
	 * This method initializes jCBBarra	
	 * 	
	 * @return javax.swing.JCheckBox	
	 */
	private JCheckBox getJCBBarra() {
		if (jCBBarra == null) {
			jCBBarra = new JCheckBox();
			jCBBarra.setText("Barra");
			jCBBarra.setSize(new Dimension(60, 13));
			jCBBarra.setMnemonic(KeyEvent.VK_B);
			jCBBarra.setName("barra");
			jCBBarra.setToolTipText("Click para marcar la consumición a preparar en barra");
			jCBBarra.setLocation(new Point(10, 242));
			jCBBarra.addItemListener(this);
		}
		return jCBBarra;
	}

	/**
	 * This method initializes jCBRetrasar	
	 * 	
	 * @return javax.swing.JCheckBox	
	 */
	private JCheckBox getJCBRetrasar() {
		if (jCBRetrasar == null) {
			jCBRetrasar = new JCheckBox();
			jCBRetrasar.setToolTipText("Click para marcar el plato para no enviar a cocina");
			jCBRetrasar.setMnemonic(KeyEvent.VK_R);
			jCBRetrasar.setText("Retrasar");
			jCBRetrasar.setSize(new Dimension(75, 24));
			jCBRetrasar.setLocation(new Point(10, 255));
			jCBRetrasar.setActionCommand("Retrasar");
			jCBRetrasar.setName("retrasar");
			jCBRetrasar.addItemListener(this);
		}
		return jCBRetrasar;
	}
	/**
	 * Establece la observación que se le va a añadir a la consumicion 
	 * @param obs
	 */
	public void setObservacion(String obs)
	{
		if(obs!=null)
			this.observaciones=obs;
	}
	/**
	 * TODO:
	 *  Gestión de los botones
	 */
	public void actionPerformed(ActionEvent e)
	{
		if (e.getActionCommand().equals("CancelarSilla"))
		{
			this.dispose();	//esconde la ventana y se deshace de ella
			new EditarConsumiciones(r,pedido).setVisible(true);			
		}	
		else if (e.getActionCommand().equals("SiguienteSilla"))
		{
			this.setContentPane(this.getJElegirSeccion());			
		}	
		else if (e.getActionCommand().equals("CancelarSeccion"))
		{
			this.setContentPane(this.getJElegirSilla());
		}	
		else if (e.getActionCommand().equals("SiguienteSeccion"))
		{
			this.arrayProductos = this.seccionSeleccionada.getProductos();	//esto no es un acceso a BD!!!!!
			this.setContentPane(this.getJElegirProducto());
			creaModeloProductos();			
		}	
		else if (e.getActionCommand().equals("CancelarProducto"))
		{
			this.setContentPane(this.getJElegirSeccion());
		}	
		else if (e.getActionCommand().equals("AceptarProducto"))
		{
			//intentamos añadir la consumicion al pedido, en caso de problemas, se vuelve a la Edicion de pedidos
			
			if(this.consumicionAEditar==null && !this.pedido.anadirConsumicion(poductoSeleccionado, comensalSelecionado, estado, observaciones))
			{
				JOptionPane.showMessageDialog(
						this,
						"No se ha podido crearse la consumición",
						"ERROR al añadir consumición",
						JOptionPane.ERROR_MESSAGE);
			}
			else if(this.consumicionAEditar!=null &&  !this.pedido.modificarConsumicion(consumicionAEditar, poductoSeleccionado, comensalSelecionado, estado, observaciones))
			{
				JOptionPane.showMessageDialog(
						this,
						"No se ha podido editarse la consumición",
						"ERROR al editar consumición",
						JOptionPane.ERROR_MESSAGE);
			}
			this.dispose();	//esconde la ventana y se deshace de ella
			new EditarConsumiciones(r,pedido).setVisible(true);	
		}	
		else if (e.getActionCommand().equals("Observaciones"))
		{
			this.setVisible(false);	//esconde la ventana
			new EspecificarObservaciones(this, this.pedido).setVisible(true);	
		}	
	}
	/**
	 * Gestion de las listas
	 */
	public void valueChanged(ListSelectionEvent e) 
	{
		//SELECCION EN LA LISTA DE SILLAS
		if(e.getSource()==this.jlElegirSilla)
		{
			int index = jlElegirSilla.getSelectedIndex();
			if(index < 0)
			{
				this.comensalSelecionado=-1;
				this.getJbSiguienteSilla().setEnabled(false);
			}
			else
			{
				this.comensalSelecionado = this.jlElegirSilla.getSelectedIndex();
				this.getJbSiguienteSilla().setEnabled(true);
			}		
		}
		//SELECCION EN LA LISTA DE SECCIONES
		if(e.getSource()==this.jlSecciones)
		{
			int index = jlSecciones.getSelectedIndex();
			if(index < 0)
			{
				this.seccionSeleccionada=null;
				this.getJbSiguienteSeccion().setEnabled(false);
			}
			else
			{
				this.seccionSeleccionada = this.arraySecciones[this.jlSecciones.getSelectedIndex()];
				this.getJbSiguienteSeccion().setEnabled(true);
			}						
		}		
		//SELECCION EN LA LISTA DE PRODUCTOS
		if(e.getSource()==this.jlProductos)
		{
			int index = jlProductos.getSelectedIndex();
			if(index < 0)
			{
				this.poductoSeleccionado=null;
				this.getJbSiguienteProducto().setEnabled(false);
			}
			else
			{
				this.poductoSeleccionado = this.arrayProductos[this.jlProductos.getSelectedIndex()];
				this.getJbSiguienteProducto().setEnabled(true);
			}						
		}		
	}
	/**
	 * Gestion de eventos de cambio de estado para los check box
	 */
	public void itemStateChanged(ItemEvent e) 
	{
		
		if(e.getItemSelectable()==this.getJCBBarra())	//ha cambiado el estado de 'barrar'
		{
			if(e.getStateChange()== ItemEvent.SELECTED)
			{
				this.estado=Consumicion.SERVIDO;
				this.jCBRetrasar.setEnabled(false);
			}
			else if (e.getStateChange()== ItemEvent.DESELECTED)
			{
				this.estado=Consumicion.SOLICITADO;
				this.jCBRetrasar.setEnabled(true);
			}
		}
		else if(e.getItemSelectable()==this.getJCBRetrasar())	//ha cambiado el estado de 'retrasar'
		{
			if(e.getStateChange()== ItemEvent.SELECTED)
			{
				this.estado=Consumicion.RETRASADO;
				this.jCBBarra.setEnabled(false);
			}
			else if (e.getStateChange()== ItemEvent.DESELECTED)
			{
				this.estado=Consumicion.SOLICITADO;
				this.jCBBarra.setEnabled(true);
			}			
		}		
	}
}
